package org.jeecg.modules.wechat;

import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * AccessToken服务
 *
 * @author caspar.chen
 * @date 2017-5-12
 */
@Service
public class AccessTokenServiceImpl implements AccessTokenService {


    private static final Logger log = LoggerFactory
            .getLogger(AccessTokenServiceImpl.class);

    private static String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx8b31a64d32d7705a&secret=d8ef4d74e1d9380fd16e1fe806cb549c";
    /**
     * 获取access_token的接口地址（GET） 限200（次/天）
     */
    private final static String URL_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

    /**
     * 获取access_token对象
     *
     *            凭证
     *            密钥
     * @return AccessToken对象
     */
//    public AccessToken getAccessToken() {
//        //缓存在redis中，设置过期时间为2小时以内，因为token过期时间是7200秒=2小时，而且一天只有200次请求次数
//        String tokenStr = stringRedisTemplate.opsForValue().get("author");
//        if(StringHoe.isNotEmpty(tokenStr)){
//            return JSONObject.parseObject(tokenStr, AccessToken.class);
//        }
//        String url = URL_ACCESS_TOKEN.replace("APPID",
//                "wx8bd9cca3bae891cf").replace("APPSECRET",
//                "18c6607c8335e2f6c4207b340dc7c114");
//        JSONObject jsonObject = HttpRequestUtil.createDefault().doGetToJsonObject(url);
//        AccessToken accessToken = null;
//        // 如果请求成功
//        if (jsonObject != null) {
//            try {
//                System.out.println(jsonObject.toJSONString());
//                accessToken = new AccessToken();
//                accessToken.setToken(jsonObject.getString("access_token"));
//                accessToken.setExpiresIn(jsonObject.getInteger("expires_in"));
//                //set 到redis
//                stringRedisTemplate.opsForValue().set("author", JSONObject.toJSONString(accessToken));
//            } catch (JSONException e) {
//                accessToken = null;
//                // 获取token失败
//                log.error("获取token失败:" + jsonObject.toString());
//            }
//        }
//        return accessToken;
//    }

    @Override
    public AccessToken getAccessToken() {
        //缓存在redis中，设置过期时间为2小时以内，因为token过期时间是7200秒=2小时，而且一天只有200次请求次数
//        String tokenStr = stringRedisTemplate.opsForValue().get("author");
//        if(StringHoe.isNotEmpty(tokenStr)){
//            return JSONObject.parseObject(tokenStr, AccessToken.class);
//        }
        String doPost = HttpClientUtil.doPost(url, null, "utf-8");
        // AccessToken accessToken = JSONObject.parseObject(doPost, AccessToken.class);
        Map map = JSONObject.parseObject(doPost, Map.class);
        AccessToken accessToken = new AccessToken();
        accessToken.setToken(map.get("access_token").toString());
        accessToken.setExpiresIn(Integer.valueOf(map.get("expires_in").toString()));
        if (accessToken.getToken() == null){
            accessToken = null;
            return accessToken;
        }
        //set 到redis
//        stringRedisTemplate.opsForValue().set("author", JSONObject.toJSONString(accessToken));
        return accessToken;
    }

    @Override
    public String getAccessTokenStr() {
        return null;
    }
}